package org.dianzitiaodong.demo;

import com.alibaba.dashscope.audio.tts.SpeechSynthesisAudioFormat;
import com.alibaba.dashscope.audio.tts.SpeechSynthesisParam;
import com.alibaba.dashscope.audio.tts.SpeechSynthesizer;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;

public class Text2VoiceMain {

    public static void SyncAudioDataToFile() {
        SpeechSynthesizer synthesizer = new SpeechSynthesizer();
        SpeechSynthesisParam param = SpeechSynthesisParam.builder()
                .model("sambert-zhigui-v1")
                .text("从我接触的一些富人来看，他们是有一些相同的思维特征的。\n" +
                        "第一种情况就普通人是我手里边有一百分的资源，我才敢做一百份的事情。\n" +
                        "富人的思维呢刚好是反过来的，他会先定目标，然后再去组织资源。\n" +
                        "你在这种逻辑下面是没有成不了的事。\n" +
                        "那没人你就去找，不懂的事你就去找专业的懂的人，资金不够就去借。\n" +
                        "在这种思维下面，对手也可以合作，敌人也是可以和好的。\n" +
                        "所以他们这种思维下面就会引出来第二种思维逻辑，就是他们特别擅长拆分目标，或者叫拆解任务。\n" +
                        "我定好目标后，可以把目标拆解成很多个条件，然后这些条件再当成一个新的目标去拆分，最后越拆越细细到一定程度你会发现非常容易去执行和落实。\n" +
                        "然后再用第一条的思维去匹配那些合适的资源，去落实这些拆分以后的条件，这种情况下执行力会变得非常高。\n" +
                        "还有个是普通人和富人的状态不一样。\n" +
                        "一个普通人你去找他他永远是在准备一个事情的状态中。\n" +
                        "他嘴里面说出来我在研究经验，我在积累人脉，现在时机不够，现在正在学习中，反正就是条件永远没有凑齐的时候，他好像觉得一旦自己把这些条件准备好了，那全世界都会跪在他脚底下或者是塌。\n" +
                        "任何时候都是在做一个事情的状态中，他在以战养战，永远都是一边做，一边解决问题，一边想办法，一边组织资源。\n" +
                        "所以富人其实是时刻在实战的过程中养能力。\n" +
                        "那你说普通人那种纸上谈兵，他什么时候能追得上？\n" +
                        "其实真正的圈层差距，我感觉也是。\n" +
                        "这些资源观，这些目标感，还有这些拆解问题的核心能力，和你目前有没有钱根本没有多大关系。\n" +
                        "有这些思维的早晚都会有钱。")
                .sampleRate(48000)
                .format(SpeechSynthesisAudioFormat.WAV)
                .apiKey("sk-2e5d1d12f35746699ddeba5448d4f921")
                .build();

        File file = new File("output.wav");
        // 调用call方法，传入param参数，获取合成音频
        ByteBuffer audio = synthesizer.call(param);
        try (FileOutputStream fos = new FileOutputStream(file)) {
            fos.write(audio.array());
            System.out.println("synthesis done!");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        SyncAudioDataToFile();
        System.exit(0);
    }
}
